﻿using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using Model;

namespace DataAccess
{
    public class VentasDataAccess
    {
        public IList<Ventas> ObtenerVentas(int anio, int mes)
        {
            var ventas = new List<Ventas>();

            using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "ObtenerVentas",
                    new[] { new SqlParameter("Anio", anio), new SqlParameter("IdMes", mes) }))
            {
                while (dataReader.Read())
                {
                    ventas.Add(CreateEntity(dataReader));
                }
                dataReader.Close();
            }
            return ventas;
        }

        public DataTable ObtenerVentasTotales(int anio, int mesInicio, int mesFin)
        {
            var ventas = new DataTable();

            using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "ObtenerVentasTotales",
                    new[] { new SqlParameter("@Anio", anio), new SqlParameter("@MesInicio", mesInicio), new SqlParameter("@MesFin", mesFin) }))
            {
                ventas.Load(dataReader);
                dataReader.Close();
            }
            return ventas;
        }

        public DataTable ObtenerVentasContado(int anio, int mesInicio, int mesFin)
        {
            var ventas = new DataTable();

            using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "ObtenerVentasContado",
                    new[] { new SqlParameter("@Anio", anio), new SqlParameter("@MesInicio", mesInicio), new SqlParameter("@MesFin", mesFin) }))
            {
                ventas.Load(dataReader);
                dataReader.Close();
            }
            return ventas;
        }

        public DataTable ObtenerVentasCredito(int anio, int mesInicio, int mesFin)
        {
            var ventas = new DataTable();

            using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "ObtenerVentasCredito",
                    new[] { new SqlParameter("@Anio", anio), new SqlParameter("@MesInicio", mesInicio), new SqlParameter("@MesFin", mesFin) }))
            {
                ventas.Load(dataReader);
                dataReader.Close();
            }
            return ventas;
        }


        /*public Colaborador ObtenerColaboradorPorDocumento(int documento)
        {
            var colaborador = new Colaborador();

            using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "ObtenerColaboradorPorDocumento",
                    new[] { new SqlParameter("Documento", documento) }))
            {
                while (dataReader.Read())
                {
                    colaborador = CreateEntity(dataReader);
                }
                dataReader.Close();
            }
            return colaborador;
        }

        public IList<Colaborador> ObtenerColaboradores()
        {
            var colaborador = new List<Colaborador>();

            using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "ObtenerColaboradores"))
            {
                while (dataReader.Read())
                {
                    colaborador.Add(CreateEntity(dataReader));
                }
                dataReader.Close();
            }
            return colaborador;
        }

        public void InsertarColaborador(Colaborador colaborador)
        {
            SqlHelper.ExecuteNonQuery(CommandType.StoredProcedure, "InsertarColaborador",
                new[]
                {
                    new SqlParameter("DocumentoIdentidad", colaborador.DocumentoIdentidad),
                    new SqlParameter("TipoDocumento", colaborador.TipoDocumento),
                    new SqlParameter("Nombres", colaborador.Nombres),
                    new SqlParameter("Apellidos", colaborador.Apellidos),
                    new SqlParameter("Telefono", colaborador.Telefono),
                    new SqlParameter("Domicilio", colaborador.Domicilio)
                });
        }*/

        private Ventas CreateEntity(IDataReader dataReader)
        {
            return new Ventas()
                {
                    IdColaborador = SqlHelper.GetInt(dataReader, 0),
                    NombreColaborador = SqlHelper.GetString(dataReader, 1),
                    Anio = SqlHelper.GetInt(dataReader, 2),
                    IdMes = SqlHelper.GetInt(dataReader, 3),
                    VentasContado = SqlHelper.GetDouble(dataReader, 4),
                    VentasCredito = SqlHelper.GetDouble(dataReader, 5)
                };
        }

        public void InsertarActualizarVentas(Ventas ventas)
        {
            SqlHelper.ExecuteNonQuery(CommandType.StoredProcedure, "InsertarActualizarVentas",
                new[]
                {
                    new SqlParameter("IdColaborador", ventas.IdColaborador),
                    new SqlParameter("Anio", ventas.Anio),
                    new SqlParameter("IdMes", ventas.IdMes),
                    new SqlParameter("VentasContado", ventas.VentasContado),
                    new SqlParameter("VentasCredito", ventas.VentasCredito)
                });
        }
    }
}

